#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
const int mod=1000000007;
int f[65][65][65];
int dp[65],newdp[65];
int main()
{
	freopen("op.in","r",stdin);
	freopen("op.out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0); 
	long long x,y,n;
	int ans;
	cin>>x>>y;
	for(int i=0;i<60;i++)
		for(int j=0;j<60;j++)
			for(int k=0;k<=j;k++)
			{
				if(i&&k)
					f[i][j][k]=f[i-1][j-1][k-1];
				else
				{
					f[i][j][k]=(i==k);
					if(i)
						for(int l=j;l>=k;l--)
							f[i][j][k]=(f[i][j][k]+1LL*f[i-1][j][l]*f[i-1][l][k]%mod)%mod;
				}
			}
	ans=0;
	for(int t=0;t<60;t++)
	{
		n=y-x*(1LL<<t);
		if(n<0)
			break;
		for(int i=0;i<=t;i++)
			dp[i]=0;
		dp[t]=1;
		for(int i=0;i<=t;i++)
			newdp[i]=0;
		for(int p=59;p>=0;p--)
			if(n&(1LL<<p))
			{
				for(int i=0;i<=t;i++)
					for(int j=t;j>=i;j--)
						newdp[i]=(newdp[i]+1LL*dp[j]*f[p][j][i]%mod)%mod;
				for(int i=0;i<=t;i++)
					dp[i]=newdp[i];
				for(int i=0;i<=t;i++)
					newdp[i]=0;
			}
		for(int i=0;i<=t;i++)
			ans=(ans+dp[i])%mod;
	}
	cout<<ans<<"\n";
	return 0;
}
